#!/usr/bin/python
# -*- coding: utf-8 -*-

from os import *
import re
import time

def FichierDateDict(listdir = listdir(getcwd()),):
    '''cette fonction renvoie un dictionnaire des fichiers extrait de\
     dvgrab et de leurs date de prise de vue'''
    
    regexp = re.compile('\S*-+\d+\d+\d+\d+.[0-3]+[0-9]+.+[0-9]+[0-9]+_+[0-9]+[0-9]-[0-9]+[0-9]+-+[0-9]+[0-9]+.dv+', re.LOCALE)
    regexp_date = re.compile('\d+\d+\d+\d+.[0-3]+[0-9]+.+[0-9]+[0-9]+_+[0-9]+[0-9]-[0-9]+[0-9]+-+[0-9]+[0-9]+')
    fichierDate = {}
    listdir = sorted(listdir)
    for fichier in listdir:
        match = regexp.findall(fichier)
        if match:
            match = regexp_date.findall(fichier)
        if match:
            fichierDate[fichier] = time.strptime(match[0],'%Y.%m.%d_%H-%M-%S')
    return fichierDate



def ListingFusionnable(Timelimit, dico = FichierDateDict()):
    ''' cette fonction prend en argument un dictionnaire de la forme
     fichier:date et organise les fichiers en un ensemble de listes dont les
     fichier n'on pas plus de timelimit secondes d'écart'''

    ListeDico = [] 
    for a in dico:
        liste = []
        liste.append(a)
        liste.append(dico[a])
        ListeDico.append(liste)
        ListeDico = sorted(ListeDico)    
    ListeControl = []
    ListeFusion = []
    for a in ListeDico:
        if a[0] in ListeControl:
            pass
        else:
            Liste = [a[0]]
            ListeControl.append(a[0])
            for b in ListeDico:
                if b[0] in ListeControl:
                    pass
                else:
                    TimeElapse = time.mktime(b[1]) - time.mktime(a[1])
                    if TimeElapse < Timelimit and TimeElapse > 0:
                        ListeControl.append(b[0])
                        Liste.append(b[0])
                        a = b   
            ListeFusion.append(Liste)
    return ListeFusion




def Fusion(listing_fusionnable):
#TODO une doc string ?     
    for a in listing_fusionnable:
        argumentFichier = " "
        for i in a:
            argumentFichier = argumentFichier+" "+i
        arg = "mencoder\
         -noidx \
         -ovc copy \
         -oac copy "\
          + argumentFichier + " -o "+i+"end"
        system(arg) 
        
def timelimit(format,valeur):
    '''cette fonction renvoie le nombre de secondes dans valeur '''
    if format == "secondes":
        pass
    elif format == "minutes":
        valeur = valeur*60
    elif format == "heures":
        valeur = valeur*3600
    elif format == "jour":
        valeur = valeur*86400
    return valeur
    
    
def VideotoPhoto(framerate, fichier):
    '''cette fonction prend des photos dans une vidéo'''
    arg = "ffmpeg -i "+ fichier + " -r "+str(framerate)+" -f image2 "+fichier+"-%03d.jpeg"
    system(arg)
    
def ImageWave(fichier,amplitude,longueur):
    '''cette fonction donne un effet de vague à une photo '''
    arg = "convert "+ fichier+ " -wave "+str(amplitude)+"x"+str(longueur)+" "+fichier+".wave"    
    system(arg)

def ImagetoVideo(image,frames):
    '''cette fonction créer autant de copies de 'image', qu'il y as de 'frames. Puis les numérote'''
    count = 0
    while count < frames:
        arg = "cp "+image+" "+image+str(count)+".jpg"
        count += 1
        system(arg)

